Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

gm-crypto

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gm-crypto

An implementation of GM/T industry standards

  • 0.1.12
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

gm-crypto

Build Status codecov Commitizen friendly code style: prettier PRs Welcome

密码行业标准化委员会

A pure JavaScript implementation of GM/T series(sm2,sm3,sm4) cryptographic algorithms compatible with Node.js and browsers, with type declaration files support.

Quick Start

Install

Using npm:

$ npm install gm-crypto

Using yarn:

$ yarn add gm-crypto

Basic Usage

SM2

Public Key Cryptographic Algorithm Based on Elliptic Curves.

const { SM2 } = require('gm-crypto')

const { publicKey, privateKey } = SM2.generateKeyPair()
const originalData = 'SM2 椭圆曲线公钥密码算法'

const encryptedData = SM2.encrypt(originalData, publicKey, {
  inputEncoding: 'utf8',
  outputEncoding: 'base64'
})

const decryptedData = SM2.decrypt(encryptedData, privateKey, {
  inputEncoding: 'base64',
  outputEncoding: 'utf8'
})
SM3

Cryptographic Hash Algorithm.

const { SM3 } = require('gm-crypto')

console.log(SM3.digest('abc'))
console.log(SM3.digest('YWJj', 'base64'))
console.log(SM3.digest('616263', 'hex', 'base64'))
SM4

Block Cipher Algorithm.

const { SM4 } = require('gm-crypto')

const key = '0123456789abcdeffedcba9876543210' // Any string of 32 hexadecimal digits
const originalData = 'SM4 国标对称加密'

/**
 * Block cipher modes:
 * - ECB: electronic codebook
 * - CBC: cipher block chaining
 */

let encryptedData, decryptedData

// ECB
encryptedData = SM4.encrypt(originalData, key, {
  inputEncoding: 'utf8',
  outputEncoding: 'base64'
})
decryptedData = SM4.decrypt(encryptedData, key, {
  inputEncoding: 'base64',
  outputEncoding: 'utf8'
})

// CBC
const iv = '0123456789abcdeffedcba9876543210' // Initialization vector(any string of 32 hexadecimal digits)
encryptedData = SM4.encrypt(originalData, key, {
  iv: iv,
  mode: SM4.constants.CBC,
  inputEncoding: 'utf8',
  outputEncoding: 'hex'
})
decryptedData = SM4.decrypt(encryptedData, key, {
  iv: iv,
  mode: SM4.constants.CBC,
  inputEncoding: 'hex',
  outputEncoding: 'utf8'
})

API

SM2.generateKeyPair()

Generates a new asymmetric key pair.

SM2.encrypt(data, key[, options])

Encrypt data.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferPlain message
keystringPublic key generated by SM2.generateKeyPair()
optionsobjectOptions
options.modeC1C3C2 | C1C2C3C1C3C2Concatenation mode
options.inputEncodingstring"utf8"The encoding of the plain data string,if data is not a string then inputEncoding is ignored.
options.outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.
options.pcbooleanfalseIncludes PC mark as first byte

SM2.decrypt(data, key[, options])

Decrypt data.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferCiphered data
keystringPrivate key generated by SM2.generateKeyPair()
options.modeC1C3C2 | C1C2C3C1C3C2Concatenation mode
options.inputEncodingstringThe encoding of the plain data string,if data is not a string then inputEncoding is ignored.
options.outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.
options.pcbooleanfalseIncludes PC mark as first byte

SM3.digest(data, [inputEncoding], [outputEncoding])

Calculates the digest.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferData message
inputEncodingstring"utf8"The encoding of the data string, if data is not a string then inputEncoding is ignored.
outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.

SM4.encrypt(data, key[, options])

Encrypt data.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferPlain message
keystringCipher key(any string of 32 hexadecimal digits)
optionsobjectOptions
options.modeECB | CBCECBBlock cipher mode
options.ivstringInitialization vector(any string of 32 hexadecimal digits)
options.inputEncodingstring"utf8"The encoding of the plain data string,if data is not a string then inputEncoding is ignored.
options.outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.

SM4.decrypt(data, key[, options])

Decrypt data.

ParamTypeDefaultDescription
datastring|ArrayBuffer|BufferCiphered data
keystringCipher key(any string of 32 hexadecimal digits)
optionsobjectOptions
options.modeECB | CBCECBBlock cipher mode
options.ivstringInitialization vector(any string of 32 hexadecimal digits)
options.inputEncodingstringThe encoding of the plain data string,if data is not a string then inputEncoding is ignored.
options.outputEncodingstringIf outputEncoding is provided, a string will be returned, otherwise a ArrayBuffer is returned.

Keywords

FAQs

Package last updated on 16 Jun 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc